home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CD ROM Paradise Collection 4
/
CD ROM Paradise Collection 4 1995 Nov.iso
/
program
/
swags_z.zip
/
STRINGS.SWG
/
0012_ST-CASE6.PAS.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1993-05-28
|
2KB
|
72 lines
{
NORBERT IGL
> Note that your uppercase characters do not include the german Umlauts
> and overlap sometimes with other foreign characters. There is a DOS
> function call to convert a string to all upcercase letters. Norbert
> Igl and I wrote a ASM end implementation, maybe he could repost his all-
> Pascal version that conforms to the DOS country information.
}
Unit Upper;
{ Country-independent upcase-procedures (c) 1992 N.Igl
Uses the COUNRY=??? from your CONFIG.SYS to get the correct uppercase.
SpeedUp with a table-driven version to avoid multiple DOS-Calls.
Released to the public domain ( FIDO: PASCAL int'l ) in 12/92 }
Interface
function UpCase(ch : char) : Char;
function UpCaseStr(S : String) : String;
Implementation uses Dos;
Const
isTableOk : Boolean = FALSE;
Var
theTable : Array[0..255] of Char;
Procedure SetUpTable; { called only at Unit-init }
var
Regs: Registers;
x : byte;
begin
FillChar(theTable, Sizeof( theTable ), #0); { Fill with NULL }
For x := 1 to 255 do
theTable[x] := CHAR(x); { predefined values }
if Lo(DosVersion) < 4 then { n/a in this DOS... }
begin { use Turbo's Upcase }
for x := 1 to 255 do
theTable[x] := System.Upcase(CHAR(x));
exit;
end;
Regs.AX := $6521; { "Capitalize String" }
Regs.CX := 255; { "string"-length }
Regs.DS := Seg(theTable); { DS:DX... }
Regs.DX := Ofs(theTable[1]); { ...points to the "string"}
Intr($21,Regs); { let DOS do it ! }
isTableOK := (Regs.Flags and FCarry = 0); { OK ? }
end;
function UpCase(ch : char) : char;
begin
UpCase := theTable[BYTE(ch)]
end;
function UpCaseStr(S : String) : String;
var x: Byte;
begin
for x := 1 to length(S) do
S[x]:= theTable[BYTE(S[x])];
UpCaseStr := S
end;
begin
SetUpTable
end.